/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package model;

import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.math.BigInteger;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.security.SecureRandom;
import java.sql.Array;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import java.sql.Timestamp;

import java.util.ArrayList;
import java.util.Calendar;

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.mail.Message;

/**
 *
 * @author Carlos Suárez Descripcion: Esta clase se encarga de la conexion a la
 * BD y de realizar las consultas sobre la misma
 */
public class RDBS {

    static public String database;
    private SecureRandom random = new SecureRandom();

    public Connection cnn;

    // constructor que realiza la conexion al la base de datos.
    public RDBS(String server, String database, String user, String password) {
        try {
            this.database = database;
            Class.forName("com.mysql.jdbc.Driver");
            String sql = "jdbc:mysql://" + server + "/" + database;
            this.cnn = DriverManager.getConnection(sql, user, password);

        } catch (SQLException ex) {
            Logger.getLogger(RDBS.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(RDBS.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    // Funcion para inspeccionar si la conexion a la BD se realizo
    public boolean isSetConnexion() {
        if (this.cnn == null) {
            return false;
        }
        return true;
    }

    /**
     * Funcion que recibe un identificador de Docente y retorna las materias
     * asociadas
     *
     * @param idDocente
     * @return Materias
     */
    public ArrayList<String> getMaterias(String token, String user_id, String idDocente) {
        ArrayList<String> materias = new ArrayList<String>();
        if (validarUsuario(token, user_id)) {
            try {
                //Analizar la necesidad del "group by"

                PreparedStatement smt = cnn.prepareStatement("SELECT MATERIA.ID_MATERIA, MATERIA.NOMBRE_MATERIA FROM MATERIA, DOCENTE WHERE MATERIA.ID_DOCENTE=DOCENTE.ID_DOCENTE AND DOCENTE.ID_DOCENTE='" + idDocente + "' ORDER BY MATERIA.NOMBRE_MATERIA");
                   
                ResultSet resultado = smt.executeQuery();

                while (resultado.next()) {
                    //String table = resultado.getString("NOMBRE_CURSO");
                    String id = resultado.getString("MATERIA.ID_MATERIA");
                    String table = resultado.getString("MATERIA.NOMBRE_MATERIA");

                    materias.add(table);
                    materias.add(id);

                }
            } catch (SQLException ex) {
                Logger.getLogger(RDBS.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        else{
            materias.add("validacion error");
        }
        return materias;
    }

    public String setAsistencia(String token, String user_id, String idMateria, ArrayList<Integer> idEstudiantes, ArrayList <Integer> asistencia) {
        String resultado = "";
        int filasAfectadas = 0;
        int idMat = Integer.parseInt(idMateria);
        int asistio = 0;
        int index = 0;
        if (validarUsuario(token, user_id)) {
            Calendar myCalendar;
            myCalendar = Calendar.getInstance();
            Timestamp dateDayMonthYear = new Timestamp((myCalendar.get(Calendar.YEAR)) - 1900, myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH), myCalendar.get(Calendar.HOUR_OF_DAY), myCalendar.get(Calendar.MINUTE), myCalendar.get(Calendar.SECOND), 0);
            try {
                String insertTableSQL = "INSERT INTO ASISTENCIA"
                        + "(ID_ESTUDIANTE, ID_MATERIA, FECHA_ASISTENCIA, FECHA_ENVIO, ASISTE) VALUES"
                        + "(?,?,?,?,?)";
                PreparedStatement stm = cnn.prepareStatement(insertTableSQL);
                for (Integer idEstudiante : idEstudiantes) {
                    asistio = asistencia.get(index);
                    stm.setInt(1, idEstudiante);
                    stm.setInt(2, idMat);
                    stm.setTimestamp(3, dateDayMonthYear);
                    stm.setTimestamp(4, dateDayMonthYear);
                    stm.setInt(5, asistio);
                    int executeUpdate = stm.executeUpdate();
                    if (executeUpdate != 0) {
                        filasAfectadas++;
                    }
                    index++;
                    //1. enviar a los acudientes de los estudiantes con valor 0 (asistio)
                    //2. buscar  los acudientes y obtener los registro_id_tienda diferente nulos para enviar notificacion
                    //3. realizar la petidion a GMC
                }

            } catch (SQLException ex) {
                Logger.getLogger(RDBS.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        else
        {
            return "Error de Validación";
        }
        if (filasAfectadas == idEstudiantes.size()) {
            return "true";
        }
        return "false";
    }
    public String setActualizarAsistencia(String token, String user_id, String idMateria, ArrayList<Integer> idEstudiantes, ArrayList <Integer> asistencia) {
        String resultado = "";
        int filasAfectadas = 0;
        int idMat = Integer.parseInt(idMateria);
        int asistio = 0;
        int index = 0;
        if (validarUsuario(token, user_id)) {
            try {
                Calendar myCalendar;
                myCalendar = Calendar.getInstance();
                
                
                String updateRegistro = "UPDATE ASISTENCIA SET ASISTENCIA.ASISTE = ? WHERE ASISTENCIA.ID_ASISTENCIA = (SELECT NT.ID_ASISTENCIA FROM (SELECT * FROM ASISTENCIA WHERE ASISTENCIA.ID_MATERIA = ? AND ASISTENCIA.ID_ESTUDIANTE = ? ORDER BY ASISTENCIA.ID_ASISTENCIA DESC LIMIT 0,1)AS NT)";
                PreparedStatement stm = cnn.prepareStatement(updateRegistro);
                
                for (Integer idEstudiante : idEstudiantes) {
                    asistio = asistencia.get(index);
                    stm.setInt(1, asistio);
                    stm.setInt(2, Integer.parseInt(idMateria));
                    stm.setInt(3, idEstudiante);
                    int executeUpdate = stm.executeUpdate();
                    if (executeUpdate != 0)
                        filasAfectadas++;
                    index++;
                }
            } catch (SQLException ex) {
                Logger.getLogger(RDBS.class.getName()).log(Level.SEVERE, null, ex);
            }
           
        }
        else
        {
            return "Error de Validación";
        }
        if (filasAfectadas >0)
            return "true";
        return "false";
    }
    /**
     *
     * @param Identificador_Estudiante
     * @param FechaActual
     */
    public void BuscarEstudiante (int idEstudiante)
    {
        try {
            PreparedStatement smt = cnn.prepareStatement("SELECT ASISTENCIA.ID_ESTUDIANTE FROM ASISTENCIA WHERE ASISTENCIA.ID_ESTUDIANTE = '"+idEstudiante+"'");
            ResultSet resultado = smt.executeQuery();
        } catch (SQLException ex) {
            Logger.getLogger(RDBS.class.getName()).log(Level.SEVERE, null, ex);
        }
        
    }
    public ArrayList<String> getEstudiantesbyMateria(String token, String user_id,String idMateria) {
        ArrayList<String> estudiantes = new ArrayList<String>();
        if (validarUsuario(token, user_id))
        {
        try {
            PreparedStatement smt = cnn.prepareStatement("SELECT ESTUDIANTE.ID_ESTUDIANTE, ESTUDIANTE.NOMBRE_ESTUDIANTE FROM MATERIA " +
                "INNER JOIN CURSO_ESTUDIANTE ON CURSO_ESTUDIANTE.ID_CURSO = MATERIA.ID_CURSO " +
                "INNER JOIN ESTUDIANTE ON ESTUDIANTE.ID_ESTUDIANTE = CURSO_ESTUDIANTE.ID_ESTUDIANTE " +
                "WHERE MATERIA.ID_MATERIA = '"+idMateria+"'");
            ResultSet resultado = smt.executeQuery();
            while (resultado.next()) {
                String id = resultado.getString("ESTUDIANTE.ID_ESTUDIANTE");
                String nombre = resultado.getString("ESTUDIANTE.NOMBRE_ESTUDIANTE");
                estudiantes.add(id+"/"+nombre+"/2");//2 = asistencia
            }
        } catch (SQLException ex) {
            Logger.getLogger(RDBS.class.getName()).log(Level.SEVERE, null, ex);
        }
        }
         else
        {
             estudiantes.add ("Error en la validación");
        }
        return estudiantes;
        
       
    }
    public ArrayList <String> getEstudiantesByActividad (String token, String userId, String idMateria, String idDocente)
    {
        ArrayList <String> estudiantes  = new ArrayList<String>();
        if (validarUsuario (token, userId))
        {
            try {
                PreparedStatement smt = cnn.prepareStatement("SELECT ESTUDIANTE.ID_ESTUDIANTE, ESTUDIANTE.NOMBRE_ESTUDIANTE FROM `curso_estudiante`, `materia`, `estudiante` WHERE CURSO_ESTUDIANTE.ID_CURSO = MATERIA.ID_CURSO AND ESTUDIANTE.ID_ESTUDIANTE = CURSO_ESTUDIANTE.ID_ESTUDIANTE AND MATERIA.ID_MATERIA ='"+idMateria+"'");
                ResultSet resultado = smt.executeQuery();
                while (resultado.next()) {
                    String id = resultado.getString("ESTUDIANTE.ID_ESTUDIANTE");
                    String nombre = resultado.getString("ESTUDIANTE.NOMBRE_ESTUDIANTE");
                    estudiantes.add(id+"/"+nombre+"/2");
                }   
            }

            catch (SQLException ex) {
                Logger.getLogger(RDBS.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return null;
    }
    
     public ArrayList<String> getEstudiantesbyMateriaforAsistencia(String token, String user_id,String idMateria) {       
        //ArrayList<String> estudiantesDeMateria = getEstudiantesbyMateria(token,user_id,idMateria);
        ArrayList <String> estudianteDeMateriaForAsistencia = new ArrayList<String>();
        if (validarUsuario(token, user_id))
        {
        try {
            //se requiere obtener el id de los estudiantes también
            Calendar myCalendar;
            myCalendar = Calendar.getInstance();
            //Timestamp dateDayMonthYear = new Timestamp((myCalendar.get(Calendar.YEAR)) - 1900, myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0, 0);
            //Timestamp dateDayMothYearHour = new Timestamp((myCalendar.get(Calendar.YEAR)) - 1900, myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH), 23, 59, 59, 0);
            PreparedStatement smt = cnn.prepareStatement("SELECT COUNT(*) FROM CURSO_ESTUDIANTE INNER JOIN MATERIA ON MATERIA.ID_CURSO = CURSO_ESTUDIANTE.ID_CURSO WHERE MATERIA.ID_MATERIA = '"+idMateria+"'");
            ResultSet resultado1 = smt.executeQuery();
            int valor = 0;
            while (resultado1.next()) {
                valor = resultado1.getInt(1); 
            }
            System.out.println(valor);
            PreparedStatement smt2 = cnn.prepareStatement("SELECT ASISTENCIA.ID_ESTUDIANTE, ESTUDIANTE.NOMBRE_ESTUDIANTE, ASISTENCIA.ASISTE FROM ASISTENCIA " +
                "INNER JOIN ESTUDIANTE ON ESTUDIANTE.ID_ESTUDIANTE = ASISTENCIA.ID_ESTUDIANTE " +
                "WHERE ID_MATERIA =  '"+idMateria+"' " +
                "ORDER BY ID_ASISTENCIA DESC, ASISTENCIA.ID_ESTUDIANTE " +
                "LIMIT 0, "+valor+";");
            ResultSet resultado = smt2.executeQuery();

            while (resultado.next()) {
                String id = resultado.getString("ASISTENCIA.ID_ESTUDIANTE");
                String nombre = resultado.getString("ESTUDIANTE.NOMBRE_ESTUDIANTE");
                String asistencia = resultado.getString("ASISTENCIA.ASISTE");
                estudianteDeMateriaForAsistencia.add(id+"/"+nombre+"/"+asistencia);//2 = asistencia
//                    estudianteDeMateriaForAsistencia.add(""+resultado1.getInt(1));
            }
        } catch (SQLException ex) {
            Logger.getLogger(RDBS.class.getName()).log(Level.SEVERE, null, ex);
        }
        }else
        {
             System.err.println("Error en la validación de usuario");
        }
        return estudianteDeMateriaForAsistencia;
        
       
    }
    public ArrayList<String> getActividadesByMateria(String token, String userId, String idDocente, String idMateria) {
        ArrayList <String> actividades = new ArrayList <String> ();
       
        if (validarUsuario(token, userId))
        {
        
//        ArrayList<String> actividades = new ArrayList<String>();
        try {
            PreparedStatement smt = cnn.prepareStatement("SELECT TAREA_DOCENTE.ID_TAREA, TAREA_DOCENTE.DESCRIPCION_TAREA, TAREA_DOCENTE.TIPO, TAREA_DOCENTE.VISTO_TAREA_DOCENTE FROM MATERIA_TAREA JOIN (SELECT * FROM `tarea` WHERE id_docente = '"+idDocente+"') AS TAREA_DOCENTE ON MATERIA_TAREA.ID_TAREA = TAREA_DOCENTE.ID_TAREA WHERE MATERIA_TAREA.ID_MATERIA ='"+idMateria+"'");
            ResultSet resultado = smt.executeQuery();

            while (resultado.next()) {
                int id_actividad = resultado.getInt("TAREA_DOCENTE.ID_TAREA");
                String descripcion = resultado.getString("TAREA_DOCENTE.DESCRIPCION_TAREA");
                int tipo = resultado.getInt ("TAREA_DOCENTE.TIPO");
                int visto = resultado.getInt("TAREA_DOCENTE.VISTO_TAREA_DOCENTE");
                actividades.add (id_actividad+"/"+descripcion+"/"+tipo+"/"+visto);
            }
        } catch (SQLException ex) {
            Logger.getLogger(RDBS.class.getName()).log(Level.SEVERE, null, ex);
        }
        }
        else
            actividades.add ("Error en la validación de usuario");
        return actividades;
    }
    

    public ArrayList<String> getEstudiantesByActividad(String token, String idUser, String idTarea) {
        ArrayList<String> estudiantes = new ArrayList<String>();
        if (validarUsuario(token, idUser))
        {
            try {
                PreparedStatement smt = cnn.prepareStatement("SELECT ESTUDIANTE.NOMBRE_ESTUDIANTE, ESTUDIANTE.ID_ESTUDIANTE FROM ESTUDIANTE_TAREA JOIN ESTUDIANTE ON ESTUDIANTE_TAREA.ID_ESTUDIANTE = ESTUDIANTE.ID_ESTUDIANTE WHERE ESTUDIANTE_TAREA.ID_TAREA = '"+idTarea+"'");
                ResultSet resultado = smt.executeQuery();

                while (resultado.next()) {
                    String id = resultado.getString("ESTUDIANTE.ID_ESTUDIANTE");
                    String nombre = resultado.getString("ESTUDIANTE.NOMBRE_ESTUDIANTE");
                    estudiantes.add (id+"/"+nombre);
                }
            } catch (SQLException ex) {
                Logger.getLogger(RDBS.class.getName()).log(Level.SEVERE, null, ex);
            }
            return estudiantes;
        }
        else 
             estudiantes.add ("Error de validación");
        return estudiantes;
    }

    //Función para enviar la notificación de asistencia a los acudientes por estudiantes 
    public ArrayList<String> getAcudientes(String token, String user_id, ArrayList<Integer> idEstudiantes) {
        ArrayList<String> acudientes = new ArrayList<String>();
        if (validarUsuario(token, user_id))
        {
            try {
                for (Integer idEstudiante : idEstudiantes) {
                    PreparedStatement smt = cnn.prepareStatement("SELECT USUARIO.NOMBRE, USUARIO.E_MAIL, USUARIO.NUMERO_CELULAR, CONTROL_LISTA.ASISTE FROM (SELECT ACUDIENTE.ID_USUARIO, ASIST.ASISTE FROM (SELECT ASISTENCIA.ID_ESTUDIANTE, ASISTENCIA.ASISTE, ES_RESPONSABLE.ID_ACUDIENTE from ES_RESPONSABLE JOIN ASISTENCIA ON ES_RESPONSABLE.ID_ESTUDIANTE = ASISTENCIA.ID_ESTUDIANTE WHERE ES_RESPONSABLE.ID_ESTUDIANTE ='"+idEstudiante+"')AS ASIST JOIN ACUDIENTE ON ASIST.ID_ACUDIENTE = ACUDIENTE.ID_ACUDIENTE) AS CONTROL_LISTA JOIN USUARIO ON CONTROL_LISTA.ID_USUARIO = USUARIO.ID_USUARIO" );
                    ResultSet resultado = smt.executeQuery();
                    while (resultado.next()) {
                        String nombreAcudiente = resultado.getString("USUARIO.NOMBRE");
                        String email = resultado.getString("USUARIO.E_MAIL");
                        String telefono = resultado.getString("USUARIO.NUMERO_CELULAR");
                        int asistencia = resultado.getInt("CONTROL_LISTA.ASISTE");
                         
                        acudientes.add(nombreAcudiente);
                        acudientes.add(email);
                        acudientes.add(telefono);
                        acudientes.add(String.valueOf(asistencia));
                    }
                }
            } catch (SQLException ex) {
                Logger.getLogger(RDBS.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        else
        {
            acudientes.add ("Error de Validación");       
        }
        return acudientes;
    }

    public ArrayList<String> getAcudientesDeEstIncumplidos(int idMateria, ArrayList<Integer> idEstudiantes) {
        ArrayList<String> acudientesIncumplidos = new ArrayList<String>();
        try {
            for (Integer idEstudiante : idEstudiantes) {

                PreparedStatement smt = cnn.prepareStatement("SELECT ACUDIENTE.NOMBRE_ACUDIENTE, ACUDIENTE.E_MAIL, ACUDIENTE.NUMERO_CELULAR FROM MATERIA, ESTUDIANTE, ACUDIENTE WHERE MATERIA.ID_MATERIA='" + idMateria + "' AND MATERIA.ID_CURSO = ESTUDIANTE.ID_CURSO AND ESTUDIANTE.ID_ESTUDIANTE !='" + idEstudiante + "'AND ESTUDIANTE.ID_ESTUDIANTE = ACUDIENTE.ID_ACUDIENTE");
                ResultSet resultado = smt.executeQuery();
                while (resultado.next()) {
                    String nombreAcudiente = resultado.getString("ACUDIENTE.NOMBRE_ACUDIENTE");
                    String email = resultado.getString("ACUDIENTE.E_MAIL");
                    String telefono = resultado.getString("ACUDIENTE.NUMERO_CELULAR");
                    acudientesIncumplidos.add(nombreAcudiente);
                    acudientesIncumplidos.add(email);
                    acudientesIncumplidos.add(telefono);
                }
            }
        } catch (SQLException ex) {
            Logger.getLogger(RDBS.class.getName()).log(Level.SEVERE, null, ex);
        }
        return acudientesIncumplidos;
    }

    /**
     * Inicio de Sesion
     *
     * @param login de usuario
     * @param password usuario
     * @return false si no encuentra ningun usuario registrado con los paremtros
     * login y password, en caso contrario retorna 'retorno' que es una cadena
     * que tiene el token (variable de sesión), idUusario y el tipoUsuario que
     * puede ser Docente, Acudiente o los dos.
     */
    public String inicioSesion(String login, String password) {
        String retorno = "false";
        String token;
        try {
            retorno = ";";
            token = String.valueOf(nextSessionId());
            retorno += String.valueOf(token);
            PreparedStatement smt = cnn.prepareStatement("SELECT * FROM USUARIO "
                    + " LEFT JOIN DOCENTE ON DOCENTE.ID_USUARIO = USUARIO.ID_USUARIO "
                    + " LEFT JOIN ACUDIENTE ON ACUDIENTE.ID_USUARIO = USUARIO.ID_USUARIO "
                    + " WHERE USUARIO.PASSWORD ='" + password + "' AND USUARIO.USERNAME ='" + login + "'");

            ResultSet resultado = smt.executeQuery();
            if (resultado.next()) {
                Calendar myCalendar;
                myCalendar = Calendar.getInstance();

                myCalendar.add(Calendar.HOUR, 1);
                Timestamp dt = new Timestamp((myCalendar.get(Calendar.YEAR)) - 1900, myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH), myCalendar.get(Calendar.HOUR_OF_DAY), myCalendar.get(Calendar.MINUTE), 0, 0);

                String id_user = resultado.getString("USUARIO.ID_USUARIO");
                retorno += "##" + id_user;
                String updateTableSQL = "UPDATE USUARIO SET token = ?, vigencia_token = ? WHERE ID_USUARIO = ?";
                PreparedStatement preparedStatement = cnn.prepareStatement(updateTableSQL);
                preparedStatement.setString(1, token);
                preparedStatement.setTimestamp(2, dt);
                preparedStatement.setInt(3, Integer.parseInt(id_user));

                preparedStatement.executeUpdate();
                int tipo_user = Integer.parseInt(resultado.getString("USUARIO.TIPO_USUARIO"));
                retorno += "##" + tipo_user;
                if (tipo_user == 1 || tipo_user == 3) {
                    int id_docente = Integer.parseInt(resultado.getString("DOCENTE.ID_DOCENTE"));
                    retorno += "##" + id_docente;
                } else if (tipo_user == 2 || tipo_user == 3) {
                    int id_acudiente = Integer.parseInt(resultado.getString("ACUDIENTE.ID_ACUDIENTE"));
                    retorno += "##" + id_acudiente;
                }
                retorno += ";";
            }
        } catch (SQLException ex) {
            Logger.getLogger(RDBS.class.getName()).log(Level.SEVERE, null, ex);
        }
        return retorno;
    }

    public String inicioSesionAcudientes(String login, String password) {
        try {
            PreparedStatement smt = cnn.prepareStatement("SELECT * FROM ACUDIENTE WHERE ACUDIENTE.PASSWORD ='" + password + "' AND ACUDIENTE.LOGIN ='" + login + "'");
            //PreparedStatement smt = cnn.prepareStatement ("SELECT * FROM DOCENTE WHERE DOCENTE.LOGIN='"+login+"'AND DOCENTE.PASSWORD ='"+password+"'");
            ResultSet resultado = smt.executeQuery();
            if (resultado.next()) {
                return "true";
            }

        } catch (SQLException ex) {
            Logger.getLogger(RDBS.class.getName()).log(Level.SEVERE, null, ex);
        }
        return "false";
    }

    public String nextSessionId() {
        return new BigInteger(130, random).toString(32);
    }

    /*
    *
    *@param String tokens para validar usuario y String id Usuario
    */
    public boolean validarUsuario(String tokens, String id) {
        try {
            Calendar myCalendar;
                myCalendar = Calendar.getInstance();
                Timestamp dt = new Timestamp((myCalendar.get(Calendar.YEAR)) - 1900, myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH), myCalendar.get(Calendar.HOUR_OF_DAY), myCalendar.get(Calendar.MINUTE), 0, 0);
            PreparedStatement smt = cnn.prepareStatement("SELECT * FROM USUARIO WHERE USUARIO.TOKEN = '"+tokens+"' AND USUARIO.ID_USUARIO = '"+id+"' AND USUARIO.VIGENCIA_TOKEN >='"+dt+"';");
            ResultSet resultado = smt.executeQuery();
            while (resultado.next()) {
               return true;
            }
        } catch (SQLException ex) {
            Logger.getLogger(RDBS.class.getName()).log(Level.SEVERE, null, ex);
        }
        return false;
    }

    public String registroTienda(String token, String user_id, String regId){
        try{
         String updateTableSQL = "UPDATE USUARIO SET REGISTRO_TIENDA = ? WHERE ID_USUARIO = ?";
         PreparedStatement preparedStatement = cnn.prepareStatement(updateTableSQL);
         preparedStatement.setString(1, regId);
         preparedStatement.setInt(2, Integer.parseInt(user_id));
         int executeUpdate  = preparedStatement.executeUpdate();
         
         //Se hace el envio de la notificacion al servidor de google
         // para que se envie al cliente
         boolean respuesta = enviarMensajePrueba(regId);
          
         //System.out.println(""+respuesta);
         if (executeUpdate != 0) {
            return "true";
         }
         
        }catch (SQLException ex) {
            Logger.getLogger(RDBS.class.getName()).log(Level.SEVERE, null, ex);
        }
        return "false";
    }
    
    public boolean enviarMensajePrueba(String registration_id)
    {
      HttpURLConnection con = null;    
        try {  
      boolean flag = false; 
      
      URL gmc_url = new URL("https://android.googleapis.com/gcm/send");
           
      Calendar myCalendar;
      myCalendar = Calendar.getInstance();
      Timestamp dateDayMonthYear = new Timestamp((myCalendar.get(Calendar.YEAR)) - 1900, myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH), myCalendar.get(Calendar.HOUR_OF_DAY), myCalendar.get(Calendar.MINUTE), myCalendar.get(Calendar.SECOND), 0);            
      String collapseKey =  dateDayMonthYear.toString();
      
      String apiKey = "AIzaSyBRZYCEx2P9ZuXLGPBDQup5Z62Je69MwAk";
      
      con = (HttpURLConnection)gmc_url.openConnection();
      //con.setRequestMethod("POST");
          
      
     //String encoding = Base64.encode(apiKey.getBytes("UTF-8"));
//     String encoding = apiKey;
      
//      String urlParameters =
//      //  "Authorization=" + String.format("Basic %s", encoding) +
//        "registration_id=" + URLEncoder.encode(registration_id, "UTF-8")+
//        "&collapse_key=" + URLEncoder.encode(collapseKey, "UTF-8") +
//        "data.msg=" + URLEncoder.encode("mensaje prueba", "UTF-8");
      String urlParameters =
      //  "Authorization=" + String.format("Basic %s", encoding) +
        "registration_id=" + registration_id+
        "&collapse_key=" + collapseKey +
        "data.msg=" + "mensaje prueba";
    
     con.setRequestProperty("Authorization:", apiKey);
     // String encoding = URLEncoder.encode(apiKey,"UTF-8");
      
    //  con.setRequestProperty("Authorization", encoding);
      //con . setRequestProperty ( "Content-Length" ,  "500000" );
  //    con.setRequestProperty("registration_id", registration_id);
  //    con.setRequestProperty("collapse_key", collapseKey);
      //con.setRequestProperty("data.msg", "mensaje prueba");
      con.setDoInput(true);
      con.setDoOutput(true);
      
      
 //Send request
      OutputStreamWriter wr = new OutputStreamWriter (con.getOutputStream ());
      wr.write(urlParameters);
      wr.close ();      
   
      
       //Get Response	
     
//      InputStream is = con.getInputStream();
//      BufferedReader rd = new BufferedReader(new InputStreamReader(is));
//      String line;
//      StringBuffer response = new StringBuffer(); 
//       System.err.println("ola");
//      while((line = rd.readLine()) != null) {
//        response.append(line);
//        response.append('\r');
//       flag = true;
//      }
//      rd.close();
     // System.err.println(response.toString());
     // return response.toString();
    return flag;
    
    } catch (Exception e) {

      e.printStackTrace();
      return false;

    } finally {

      if(con != null) {
        con.disconnect(); 
      }
    }
    
    }
}
